package 公众号知识点;

import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;

import java.util.HashMap;
import java.util.Map;

public class WeChatTemplateMessageDemo {
    public static void main(String[] args) {
        // 1. 初始化 WxMpService
        WxMpService wxMpService = new WxMpServiceImpl();
        WxMpConfigStorage config = new WxMpDefaultConfigImpl();
        ((WxMpDefaultConfigImpl) config).setAppId("xxx");
        ((WxMpDefaultConfigImpl) config).setSecret("xxx");
        ((WxMpDefaultConfigImpl) config).setToken("xxx");
        ((WxMpDefaultConfigImpl) config).setAesKey("xxx");

        wxMpService.setWxMpConfigStorage(config);

        // 2. 目标用户的 OpenID
        String openId = "xxx";

        try {
            // 3. 检查用户是否关注公众号
            WxMpUser user = wxMpService.getUserService().userInfo(openId);
            if (user == null || !user.getSubscribe()) {
                System.out.println("用户未关注公众号，跳过发送");
                return;
            }

            // 4. 创建模板消息
            WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                    .toUser(openId)  // 接收者 OpenID
                    .templateId("xxx")  // 微信公众平台的模板 ID
                    .url("https://yourwebsite.com")  // 点击跳转的 URL
                    .build();

            String xx = "1";
            // 5. 填充模板数据
            Map<String, Object> values = new HashMap<>();
            values.put("keyword1", "测试"); // 订单号
            values.put("keyword2", "别急，你也有"); // 状态
            values.put("keyword3", "2025-05-3 10:30:00"); // 时间

            for (String key : values.keySet()) {
                templateMessage.addData(new WxMpTemplateData(key, values.get(key).toString()));
            }

            // 6. 发送消息
            String result = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            System.out.println("消息发送成功，msgId：" + result);
        } catch (WxErrorException e) {
            System.err.println("微信推送失败：" + e.getError().getErrorMsg());
        }
    }
}
